/**
 * Sealos对象存储模块
 * 提供统一的对象存储操作接口
 */

const config = require('./config');
const client = require('./client');

// 导出所有API
module.exports = {
  // 配置参数
  config: config,
  
  // 对象操作方法
  uploadFile: client.uploadFile,
  downloadFile: client.downloadFile,
  getObjectInfo: client.getObjectInfo,
  deleteObject: client.deleteObject,
  getObjectUrl: client.getObjectUrl,
  
  /**
   * 上传本地图片到对象存储
   * @param {Object} options 上传选项
   * @param {Function} options.chooseImage 选择图片的回调函数
   * @param {Function} options.success 上传成功回调函数
   * @param {Function} options.fail 上传失败回调函数
   * @param {string} options.prefix 对象键前缀
   * @param {Function} options.progress 上传进度回调函数
   */
  uploadImage: function(options) {
    const {
      chooseImage = wx.chooseImage,
      success,
      fail,
      prefix = 'images/',
      progress
    } = options;
    
    // 选择图片
    chooseImage({
      count: 1,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        const tempFilePath = res.tempFilePaths[0];
        
        // 生成随机文件名
        const timestamp = Date.now();
        const randomStr = Math.random().toString(36).substring(2, 8);
        const extension = tempFilePath.substring(tempFilePath.lastIndexOf('.') + 1);
        const objectKey = `${prefix}${timestamp}-${randomStr}.${extension}`;
        
        // 上传文件
        client.uploadFile({
          filePath: tempFilePath,
          objectKey: objectKey,
          contentType: `image/${extension === 'jpg' ? 'jpeg' : extension}`,
          onProgress: progress
        })
        .then((result) => {
          if (success) {
            success({
              imageUrl: result.url,
              objectKey: result.objectKey
            });
          }
        })
        .catch((error) => {
          console.error('上传图片失败:', error);
          if (fail) {
            fail(error);
          }
        });
      },
      fail: (error) => {
        console.error('选择图片失败:', error);
        if (fail) {
          fail(error);
        }
      }
    });
  },
  
  /**
   * 设置环境
   * @param {boolean} useInternalEndpoint 是否使用内部端点
   */
  setEnvironment: function(useInternalEndpoint) {
    config.ENV.useInternalEndpoint = !!useInternalEndpoint;
  }
}; 